home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / gnuish / gmake371 / readme.txt < prev    next >
Text File  |  1994-06-25  |  10KB  |  194 lines

  1. Notes on the MS-DOS port of Gnu Make.
  2. ------------------------------------
  3.  
  4. This port of Gnu Make was done by Morten Welinder <terra@diku.dk>.  Besides
  5. the FSF sources, I have used some code from a previous port by Thorsten Ohl
  6. <ohl@gnu.ai.mit.edu> who in turn used some public domain code written by
  7. Michael Rendell <{uunet,utai}michael@garfield>.  I have found some inspi-
  8. ration and an occational piece of code in DJ Delorie's port of Gnu Make
  9. version 3.69.  Did I forget anyone?
  10.  
  11.  
  12. The port is minimal in the sense that Gnu Make is still really a *nix
  13. program.  I have changed as little as possible in order to make the program
  14. work reasonably.  As an exception to this principle I have added a number
  15. of typical MsDos extension to the list of suffixes in default.c, which see.
  16. I have not tried (and I will not try) to target it to MsDos compilers.
  17.  
  18.  
  19. To run this port of Gnu Make you'll need a 286 or better, some extended
  20. memory, and MsDos version 3 or later.  You'll also need a standalone
  21. `echo' binary, or edit `job.c'
  22.  
  23.  
  24. To re-compile the program you'll need Borland Turbo C (Borland C++ will
  25. also do, I think; Microsoft C will probably need a little work) and Borland
  26. Turbo Assembler (Microsoft's Macro Assembler will do after a little work).
  27. You'll also need a good make program -- Borland's is broken and I don't
  28. know about Microsoft's.  Alternatively, you can build Gnu Make with Gnu CC
  29. as port by DJ Delorie in his Djgpp package.
  30.  
  31.  
  32. Before you recompile Gnu Make, you should configure the sources for the
  33. compiler you want to use.  You do this with the command "configure tc" or
  34. "configure gcc".  You need a stream editor (sed) for this to work.
  35.  
  36.  
  37. The real mode version of Gnu Make will swap itself to Xms memory while it
  38. executes another command.  For this reason you will need approximately
  39. 150KB of Xms memory.  If you haven't got that, you're out of luck, at least
  40. for the time being.  One day I might implement swapping to disk, but don't
  41. count on it -- Xms is so much faster.  Gnu Make takes up around 25K in
  42. memory while it executes a child process.
  43.  
  44.  
  45. When Gnu Make encounteres a command line of more than 127 characters (the
  46. limit that Ms-Dos sets) it does not panic, but tries to use alternate
  47. methods of command line passing:
  48.  
  49.     1. If a variable ENVARGS is defined it should be a colon separated
  50.        list of command names including extension, but excluding path.
  51.        A value of "rm.exe:mv.exe:ls.exe" specifies that the three programs
  52.        can take arguments via the environment.  This is done by defining
  53.        environment variables "_argc", "_argv0", ...
  54.  
  55.     2. If a variable ATFILEARGS is defined it should be a colon separated
  56.        list of command names including extension, but excluding path.
  57.        A program in this list will receive "@tempfile" as command line
  58.        where tempfile is the name of a file (using `\', not '/') that
  59.        holds the real command line as one long string.  Programs like
  60.        tasm.exe and tlink.exe are good candidates.
  61.  
  62.     3. If the file is a wrapped executeable produced by djgpp, then
  63.        method 1 will be used.
  64.  
  65.     4. If the first 31KB (don't ask) of the program file contains the
  66.        string "_argc" including a terminating 0, method 1 will be used
  67.            for the command.  There is a small chance that this is incorrect
  68.            -- rewrite your makefile if that happens.  (You would have to do
  69.            that anyway to get below 128 characters.)
  70.  
  71. If neither of these methods succeds, you're out of luck.  You must rewrite
  72. your makefile.
  73.  
  74. Gnu Make itself, of course, understands long arguments.  It uses method 1.
  75. If you wish to add this feature to one of your own programs, you can take
  76. the function "getlongargs" in file "dosstuff.c" and call it as you see in
  77. file "main.c".  I hereby donate the function "getlongargs" to the public
  78. domain.  It is thus not covered by the GPL (see section 2 of the GPL) when
  79. used this way.
  80.  
  81.  
  82. Gnu Make knows about the internal commands and special chars of the shells
  83. "command.com", "/bin/sh", "4dos.com", and "ndos.com".  The latter two are
  84. probably not up to date.  If a special char is found on a command line (say
  85. "|" for command.com), or if you use one of the internal commands (say "copy"
  86. for command.com), a shell will be invoked to execute the command.  The same
  87. goes for batch files, i.e., command files whose names end in ".bat"
  88.  
  89. When a shell is invoked and it is "command.com" or "?dos.com" the command
  90. the shell is to execute will be backslashed.  This means that if the line
  91. reads "c:/dos/mem <nul" and the shell is "command.com", Gnu Make will 
  92. execute "command.com /c c:\dos\mem <nul".  If the slashes were not reversed
  93. the shell would have complained.
  94.  
  95.  
  96. Most makefiles contain "SHELL=/bin/sh".  Unless you really have such a shell
  97. you must edit the makefile.  Inserting a "#" before "SHELL" will often do.
  98.  
  99.  
  100. ==============================================================================
  101. Thirty Reasons Why You Should Say MSDOG and not MSDOS.
  102.  
  103. -- Also known as "MSDOG -- a study in autoincompatibility, inconsistence,
  104. poor design, and general lack of thought."
  105.  
  106. Note: I have tried to be fair here by not mentioning design choices that
  107. are simply different from what others have done.  Therefore I don't have
  108. an entry just for using "/" and not "-" as switch char.  That is mostly a
  109. matter of what you like.
  110.  
  111.  
  112.  1. The file system's limit of 8+3 stinks.
  113.  2. Redirection doesn't work with batch files.
  114.  3. The default shell (Command.Com) doesn't pass a child's return code
  115.     on to its caller.  The internal commands don't return an error code.
  116.  4. Pipes, "foo|bar", are implemented by ">tempfile" and "<tempfile".
  117.  5. The execution time for a seek in a file is proportional to the offset
  118.     seeked to.  Seeks in a directory are also proportional to the number
  119.     of files in the directory.
  120.  6. The default shell (Command.Com) disregards case of environment variables
  121.     while the rest of MSDOG doesn't.  Also it doesn't allow setting of an
  122.     empty environment variable.
  123.  7. Command lines cannot be longer than 126 characters.  This makes it more
  124.     fun to port utilities that execute other programs.  As an example take
  125.     a look at Gnu Make.
  126.  8. Some file names like "huge.filename" are silently truncated to the
  127.     8+3 limit while others like "lots.of.dots" or ".emacs" simply are
  128.     illegal.  (Actually, ".emacs" is only illegal in some version of MSDOG,
  129.     I believe.)
  130.  9. Executablility is based on file names, not on file attributes.  Actually,
  131.     this is only really true for Command.Com because any file is executable
  132.     by MSDOG.  It is, however, known to be rather unsafe just to execute an
  133.     arbitrary file as a series of machine instructions.
  134. 10. You can only expand environment variables from batch files.
  135. 11. Most MSDOG commands refuse to understand "-s" as an option specifier
  136.     while others like "move" always accept it -- undocumentedly, of course.
  137. 12. You can corrupt the file system with system calls with perfectly
  138.     valid (and reasonable) arguments.
  139. 13. Almost every version of MSDOG has its own little perculiarities with
  140.     parsing of commands.  When, e.g., was the @-prefix convention intro-
  141.     duced?  Which versions allow you to echo a greater-than-sign?
  142. 14. You cannot escape the special characters of the shell.  In newer versions
  143.     you can put them inside double quotes, but -- guess what -- the quotes
  144.     are passed as part of the argument.
  145. 15. The read-only bits for directories are never used.
  146. 16. You can rename files but not directories.
  147. 17. Silly limits are all over the place: "sort" refuses to sort more than
  148.     64K; if "fc" doesn't find differences early enough then it invents some;
  149.     the shell can only set PATH to strings less than 128 characters; file
  150.     commands like "del" can work only work on one file specification.
  151. 18. You cannot redirect stderr with the default shell.
  152. 19. At least five different programs for packing executables have been used
  153.     for the lastest version of MSDOG.  The packers make it a little bit
  154.     more difficult to patch binaries.  Just a little.
  155. 20. Batch programs can take more than nine parameters, but you cannot refer
  156.     to the tenth before you give up access to the first (et cetera).
  157. 21. The "debug" program has not been updated to understand the instructions
  158.     of the 186, 286, 386, 486, Pentium, 8087, 287, and 187/387 processors.
  159. 22. You cannot pass certain characters (like "=") as part of the command
  160.     line to batch programs.
  161. 23. MSDOG is not reentrant, nor is it protected against attempts of
  162.     reentrance.
  163. 24. You can open a file like "c:\foo\..\config.sys" even if you don't have
  164.     a "foo" directory.
  165. 25. Not all versions of MSDOG can echo an empty line with the built-in
  166.     "echo" command.
  167. 26. Running a batch file from a batch file means exec-ing it by default,
  168.     so the rest of the first batch file is never seen.  This actually means
  169.     that you cannot use batch files as wrappers if you want to fix some
  170.     behaviour.
  171. 27. The default shell doesn't even think of exiting when end-of-file is
  172.     encountered on standard input.  That this hangs the system doesn't
  173.     seem to bother anyone.
  174. 28. Utilities like "sed" are not provided with MSDOG so you cannot rely on
  175.     users having them.  You cannot rely on, say, "edlin" either because not
  176.     all MSDOG versions have that either.
  177. 29. Many utilites from MSDOG check that they run under the version of MSDOG
  178.     that they were compiled for, even if they use only documented features
  179.     and would work perfectly well with any version of MSDOG since 2.0.
  180. 30. The file system is limited to approximately 2^16 allocation units.  This
  181.     means that as disks become larger, so do the allocation units and the
  182.     amount of disk space that cannot be used.
  183.  
  184.  
  185. Bonus reason regarding PCDOG, IBM's version of MSDOG:
  186.  
  187.  1. Some versions of PCDOG have been known to explicitly check that the
  188.     harddisks in the system are prepared with PCDOG and not MSDOG.  If
  189.     not, then the harddisks are simply ignored.
  190.  
  191. This list is copyright 1994 by Morten Welinder (terra@diku.dk).  It may be
  192. distributed under the terms of Gnu General Public License version 2.
  193. ==============================================================================
  194.